package co.edu.usbcali.hibernate.managebean;

import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;


import co.edu.usbcali.hibernate.logica.ClienteLogica;
import co.edu.usbcali.hibernate.logica.IClienteLogica;
import co.edu.usbcali.hibernate.modelo.Clientes;
import co.edu.usbcali.hibernate.utilidades.FacesUtils;
import co.edu.usbcali.hibernate.utilidades.Utilities;

import com.icesoft.faces.component.ext.*;

public class ClienteView {

	private HtmlOutputText lblCedula;
	private HtmlInputText txtCedula;
	private HtmlOutputText lblNombre;
	private HtmlInputText txtNombre;
	private HtmlOutputText lblDireccion;
	private HtmlInputText txtDireccion;
	private HtmlOutputText lblTelefono;
	private HtmlInputText txtTelefono;
	private HtmlCommandButton btnGuardar;
	private HtmlCommandButton btnModificar;
	private HtmlCommandButton btnLimpiar;
	private HtmlCommandButton btnEliminar;
	private HtmlCommandButton btnSalir;
	private HtmlCommandButton btnConsultar;
	private HtmlCommandButton btnAceptar;
	private boolean pnuVisible = false;
	
	public HtmlCommandButton getBtnAceptar() {
		return btnAceptar;
	}

	public void setBtnAceptar(HtmlCommandButton btnAceptar) {
		this.btnAceptar = btnAceptar;
	}

	
	
	public boolean isPnuVisible() {
		return pnuVisible;
	}

	public void setPnuVisible(boolean pnuVisible) {
		this.pnuVisible = pnuVisible;
	}

	

	public HtmlOutputText getLblCedula() {
		return lblCedula;
	}

	public void setLblCedula(HtmlOutputText lblCedula) {
		this.lblCedula = lblCedula;
	}

	public HtmlInputText getTxtCedula() {
		return txtCedula;
	}

	public void setTxtCedula(HtmlInputText txtCedula) {
		this.txtCedula = txtCedula;
	}

	public HtmlOutputText getLblNombre() {
		return lblNombre;
	}

	public void setLblNombre(HtmlOutputText lblNombre) {
		this.lblNombre = lblNombre;
	}

	public HtmlInputText getTxtNombre() {
		return txtNombre;
	}

	public void setTxtNombre(HtmlInputText txtNombre) {
		this.txtNombre = txtNombre;
	}

	public HtmlOutputText getLblDireccion() {
		return lblDireccion;
	}

	public void setLblDireccion(HtmlOutputText lblDireccion) {
		this.lblDireccion = lblDireccion;
	}

	public HtmlInputText getTxtDireccion() {
		return txtDireccion;
	}

	public void setTxtDireccion(HtmlInputText txtDireccion) {
		this.txtDireccion = txtDireccion;
	}

	public HtmlOutputText getLblTelefono() {
		return lblTelefono;
	}

	public void setLblTelefono(HtmlOutputText lblTelefono) {
		this.lblTelefono = lblTelefono;
	}

	public HtmlInputText getTxtTelefono() {
		return txtTelefono;
	}

	public void setTxtTelefono(HtmlInputText txtTelefono) {
		this.txtTelefono = txtTelefono;
	}

	public HtmlCommandButton getBtnGuardar() {
		return btnGuardar;
	}

	public void setBtnGuardar(HtmlCommandButton btnGuardar) {
		this.btnGuardar = btnGuardar;
	}

	public HtmlCommandButton getBtnModificar() {
		return btnModificar;
	}

	public void setBtnModificar(HtmlCommandButton btnModificar) {
		this.btnModificar = btnModificar;
	}

	public HtmlCommandButton getBtnLimpiar() {
		return btnLimpiar;
	}

	public void setBtnLimpiar(HtmlCommandButton btnLimpiar) {
		this.btnLimpiar = btnLimpiar;
	}

	public HtmlCommandButton getBtnEliminar() {
		return btnEliminar;
	}

	public void setBtnEliminar(HtmlCommandButton btnEliminar) {
		this.btnEliminar = btnEliminar;
	}

	public HtmlCommandButton getBtnSalir() {
		return btnSalir;
	}

	public void setBtnSalir(HtmlCommandButton btnSalir) {
		this.btnSalir = btnSalir;
	}

	public HtmlCommandButton getBtnConsultar() {
		return btnConsultar;
	}

	public void setBtnConsultar(HtmlCommandButton btnConsultar) {
		this.btnConsultar = btnConsultar;
	}

	public void limpiar_action(ActionEvent e) {
		txtCedula.setValue("");
		txtDireccion.setValue("");
		txtNombre.setValue("");
		txtTelefono.setValue("");
		txtCedula.setDisabled(false);
		btnGuardar.setDisabled(false);
        btnEliminar.setDisabled(true);
        btnModificar.setDisabled(true);
        btnLimpiar.setDisabled(false);

	}

	public void guardar_action(ActionEvent e) throws Exception {

		try {
			if (!Utilities.isNumeric(txtCedula.getValue().toString())){
				throw new Exception("La cedula debe ser numerica");
			}
			Long cliCedula=Long.parseLong(txtCedula.getValue().toString());
			String cliNombre = txtNombre.getValue().toString();
			if (!Utilities.isOnlyLetters(txtNombre.getValue().toString())){
				throw new Exception("El nombre del cliente solo debe contener letras");
			}			
			String cliDireccion = txtDireccion.getValue().toString();
			String cliTelefono = txtTelefono.getValue().toString();

			IClienteLogica clienteLogica = new ClienteLogica();
			clienteLogica.crearCliente(cliCedula, cliNombre, cliDireccion,
					cliTelefono);
			txtCedula.setValue("");
			txtDireccion.setValue("");
			txtNombre.setValue("");
			txtTelefono.setValue("");
			txtCedula.setDisabled(false);
			btnGuardar.setDisabled(false);
	        btnEliminar.setDisabled(true);
	        btnModificar.setDisabled(true);
	        btnLimpiar.setDisabled(false);
		} catch (Exception e2) {
			
			FacesUtils.addErrorMessage(e2.getMessage());
			pnuVisible = true;
		}

	}

	public void modificar_action(ActionEvent e) throws Exception {
		
		try {
			Long cliCedula=new Long(0);
			if (Utilities.isNumeric(txtCedula.getValue().toString())){
				cliCedula = Long.parseLong(txtCedula.getValue().toString());
			}else {
				throw new Exception("La cedula debe ser numerica");
			}
			String cliNombre = txtNombre.getValue().toString();
			if (!Utilities.isOnlyLetters(cliNombre)){
				throw new Exception("El nombre del cliente solo debe contener letras");
			}
			String cliDireccion = txtDireccion.getValue().toString();
			String cliTelefono = txtTelefono.getValue().toString();
			
			IClienteLogica clienteLogica = new ClienteLogica();
			clienteLogica.modificarCliente(cliCedula, cliNombre, cliDireccion, cliTelefono);
			txtCedula.setValue("");
			txtDireccion.setValue("");
			txtNombre.setValue("");
			txtTelefono.setValue("");
			txtCedula.setDisabled(false);
			btnGuardar.setDisabled(false);
	        btnEliminar.setDisabled(true);
	        btnModificar.setDisabled(true);
	        btnLimpiar.setDisabled(false);
		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
			pnuVisible = true;
		}
	}

	public void eliminar_action(ActionEvent e) throws Exception {
		
		try {
			
			if (!Utilities.isNumeric(txtCedula.getValue().toString())){
				throw new Exception("La cedula debe ser numerica");
			}
			Long cliCedula=Long.parseLong(txtCedula.getValue().toString());
			String cliNombre = txtNombre.getValue().toString();
			if (!Utilities.isOnlyLetters(txtNombre.getValue().toString())){
				throw new Exception("El nombre del cliente solo debe contener letras");
			}
			String cliDireccion = txtDireccion.getValue().toString();
			String cliTelefono = txtTelefono.getValue().toString();
			IClienteLogica clienteLogica = new ClienteLogica();
			clienteLogica.borrarCliente(cliCedula, cliNombre, cliDireccion, cliTelefono);
			
			txtCedula.setValue("");
			txtCedula.setDisabled(false);
			txtDireccion.setValue("");
			txtNombre.setValue("");
			txtTelefono.setValue("");
		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
			pnuVisible = true;
		}
		
	}

	public String salir_action() throws Exception {
		return "menu";
	}
	
	public void aceptar_action(ActionEvent e) throws Exception {
		pnuVisible = false;
	}
	
	public void listener_txtCed(ValueChangeEvent event){
		 if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
	            Clientes entity = null;

	            try {
	            	if (!Utilities.isNumeric(txtCedula.getValue().toString())){
	    				throw new Exception("La cedula debe ser numerica");
	    			}
	    			Long cliCedula=Long.parseLong(txtCedula.getValue().toString());
	                IClienteLogica clienteLogica = new ClienteLogica();	                
	                entity =  clienteLogica.consultarClientePorId(cliCedula);
	                
	            } catch (Exception e) {
	            	FacesUtils.addErrorMessage(e.getMessage());
	    			pnuVisible = true;
	            }

	            if (entity == null) {
	                btnGuardar.setDisabled(false);
	                btnEliminar.setDisabled(true);
	                btnModificar.setDisabled(true);
	                btnLimpiar.setDisabled(false);
	            } else {
	                txtDireccion.setValue(entity.getCliDireccion());
	                txtDireccion.setDisabled(false);
	                txtNombre.setValue(entity.getCliNombre());
	                txtNombre.setDisabled(false);
	                txtTelefono.setValue(entity.getCliTelefono());
	                txtTelefono.setDisabled(false);
	                txtCedula.setValue(entity.getCliCedula());
	                txtCedula.setDisabled(true);
	                btnGuardar.setDisabled(true);
	                btnEliminar.setDisabled(false);
	                btnModificar.setDisabled(false);
	                btnLimpiar.setDisabled(false);
	            }
	        }
	}
}
